home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / 051-060 / amok52 / abitur / txt / saveload.mod < prev    next >
Text File  |  1993-11-04  |  3KB  |  123 lines

  1. IMPLEMENTATION MODULE SaveLoad;
  2.  
  3. FROM Fragen IMPORT Frage, SchuelerAntwort;
  4. FROM IntuFrage IMPORT IntuFrag;
  5. FROM Str IMPORT Copy;
  6. FROM SYSTEM IMPORT ADR;
  7. FROM Arts IMPORT Assert;
  8. FROM Exec IMPORT AllocMem, FreeMem, MemReqSet, MemReqs;
  9. FROM Dos IMPORT Write, Read, Open, Close, oldFile, newFile,
  10.                 FileHandlePtr;
  11. FROM Globals IMPORT Spieler, SpielerPtr, AlleSpieler, AnzahlSpieler;
  12. FROM StundenPlan IMPORT Plaene, StundenPlan, Zeit, ClosePlanFenster;
  13. FROM AbiturScreen IMPORT AddAbiTxtLin, ShowAbiTxt, grueN, roT;
  14.  
  15.  
  16.  
  17. PROCEDURE GetKlassenName(VAR S: ARRAY OF CHAR);
  18. VAR F: Frage;
  19.     A: SchuelerAntwort;
  20.     i: INTEGER;
  21. BEGIN
  22.    F.Next := NIL;
  23.    FOR i := 0 TO 10 DO
  24.       F.Txt[i][0] := 0C;
  25.    END;
  26.    FOR i := 1 TO 6 DO
  27.       F.MultipleAntw[i][0] := 0C
  28.    END;
  29.    Copy(F.Txt[0], "Klassenname");
  30.    IntuFrag(ADR(F), A);
  31.    Copy(S, A.Str)
  32. END GetKlassenName;
  33.  
  34.  
  35. PROCEDURE SaveAktGame;
  36. VAR KlName: ARRAY[0..255] OF CHAR;
  37.     FH: FileHandlePtr;
  38.     Akt: SpielerPtr;
  39.     i: INTEGER;
  40.     Anz: LONGINT;
  41. BEGIN
  42.    IF (Zeit.Stunde = 8) AND (Zeit.Tag=0) THEN
  43.       AddAbiTxtLin("Kann doch nicht am");
  44.       AddAbiTxtLin("ersten Schultag schon");
  45.       AddAbiTxtLin("abhauen!");
  46.       ShowAbiTxt(roT);
  47.       RETURN
  48.    END;
  49.    GetKlassenName(KlName);
  50.    FH := Open(ADR(KlName), newFile);
  51.    IF FH # NIL THEN
  52.       FOR i := 1 TO 4 DO
  53.          Anz := Write(FH, ADR(Plaene[i]), SIZE(StundenPlan))
  54.       END;
  55.       Anz := Write(FH, ADR(Zeit), SIZE(Zeit));
  56.       Akt := AlleSpieler;
  57.       WHILE Akt # NIL DO
  58.          Anz := Write(FH, Akt, SIZE(Spieler));
  59.          Akt := Akt^.Next
  60.       END;
  61.       Close(FH)
  62.    ELSE
  63.       AddAbiTxtLin("Kann Klasse nicht");
  64.       AddAbiTxtLin("registrieren!");
  65.       ShowAbiTxt(grueN)
  66.    END
  67.  
  68. END SaveAktGame;
  69.  
  70.  
  71.  
  72. PROCEDURE FreeAllPlayers;
  73. VAR Temp : SpielerPtr;
  74. BEGIN
  75.    WHILE AlleSpieler # NIL DO
  76.       Temp := AlleSpieler;
  77.       AlleSpieler := AlleSpieler^.Next;
  78.       FreeMem(Temp, SIZE(Spieler))
  79.    END;
  80.    AnzahlSpieler := 0
  81. END FreeAllPlayers;
  82.  
  83.  
  84.  
  85. PROCEDURE LoadAGame;
  86. VAR AktSpieler : Spieler;
  87.     AP: SpielerPtr;
  88.     Anz : LONGINT;
  89.     KlName: ARRAY[0..255] OF CHAR;
  90.     FH: FileHandlePtr;
  91.     i:INTEGER;
  92. BEGIN
  93.    FreeAllPlayers;
  94.    GetKlassenName(KlName);
  95.    FH := Open(ADR(KlName), oldFile);
  96.    IF FH # NIL THEN
  97.       FOR i := 1 TO 4 DO
  98.          ClosePlanFenster(i);
  99.          Anz := Read(FH, ADR(Plaene[i]), SIZE(StundenPlan));
  100.          Plaene[i].W := NIL
  101.       END;
  102.       Anz := Read(FH, ADR(Zeit), SIZE(Zeit));
  103.       REPEAT
  104.          Anz := Read(FH, ADR(AktSpieler), SIZE(Spieler));
  105.          IF Anz >= SIZE(Spieler) THEN
  106.             AP := AllocMem(SIZE(Spieler), MemReqSet{public});
  107.             Assert(AP#NIL, ADR("Not enough Meomires"));
  108.             INC(AnzahlSpieler);
  109.             AP^ := AktSpieler;
  110.             AP^.Next := AlleSpieler;
  111.             AlleSpieler := AP;
  112.          END
  113.       UNTIL Anz < SIZE(Spieler);
  114.       Close(FH)
  115.    ELSE
  116.       AddAbiTxtLin("Kann Klasse nicht");
  117.       AddAbiTxtLin("finden!");
  118.       ShowAbiTxt(grueN)
  119.    END
  120. END LoadAGame;
  121.  
  122. END SaveLoad.
  123.